package com.expert.miniapp.util;

import java.util.HashMap;
import java.util.Map;

/**
 * ResourceTypeUtils - 资源类型识别工具类
 *
 * 根据资源ID前缀识别资源类型
 *
 * @author System
 * @since 2025-10-31
 */
public class ResourceTypeUtils {

    /**
     * 资源ID前缀与资源类型的映射关系
     */
    private static final Map<String, String> RESOURCE_TYPE_MAP = new HashMap<>();

    static {
        RESOURCE_TYPE_MAP.put("KYZJ", "科研专家");
        RESOURCE_TYPE_MAP.put("KJCG", "科技成果");
        RESOURCE_TYPE_MAP.put("YQSB", "仪器设备");
        RESOURCE_TYPE_MAP.put("SYJD", "实验室");
        RESOURCE_TYPE_MAP.put("QTZY", "其他资源");
    }

    /**
     * 资源类型排序优先级
     */
    public static final String[] TYPE_PRIORITY = {"KYZJ", "KJCG", "YQSB", "SYJD", "QTZY"};

    /**
     * 根据资源ID识别资源类型
     *
     * @param resourceId 资源ID（如：KYZJ0000100227）
     * @return 资源类型中文名称（如：科研专家）
     */
    public static String identifyType(String resourceId) {
        if (resourceId == null || resourceId.length() < 4) {
            return "未知资源";
        }

        String prefix = resourceId.substring(0, 4);
        return RESOURCE_TYPE_MAP.getOrDefault(prefix, "未知资源");
    }

    /**
     * 根据资源ID获取资源类型前缀
     *
     * @param resourceId 资源ID
     * @return 资源类型前缀（KYZJ/KJCG/YQSB/SYJD/QTZY）
     */
    public static String getTypePrefix(String resourceId) {
        if (resourceId == null || resourceId.length() < 4) {
            return "UNKNOWN";
        }
        return resourceId.substring(0, 4);
    }

    /**
     * 验证资源ID格式是否正确
     *
     * @param resourceId 资源ID
     * @return true=格式正确, false=格式错误
     */
    public static boolean isValidResourceId(String resourceId) {
        if (resourceId == null || resourceId.length() < 4) {
            return false;
        }

        String prefix = resourceId.substring(0, 4);
        return RESOURCE_TYPE_MAP.containsKey(prefix);
    }

    /**
     * 获取资源类型的英文标识
     *
     * @param resourceId 资源ID
     * @return 资源类型英文标识（expert/achievement/instrument/laboratory/other）
     */
    public static String getTypeIdentifier(String resourceId) {
        String prefix = getTypePrefix(resourceId);

        switch (prefix) {
            case "KYZJ":
                return "expert";
            case "KJCG":
                return "achievement";
            case "YQSB":
                return "instrument";
            case "SYJD":
                return "laboratory";
            case "QTZY":
                return "other";
            default:
                return "unknown";
        }
    }
}
